In order to increase performance of information processing systems, such as those that include processors, both hardware and software techniques have been employed. On the hardware side, processor design approaches to improve processor performance have included increased clock speeds, pipelining, branch prediction, super-scalar execution, out-of-order execution, and caches. Many such approaches have led to increased transistor count, and have even, in some instances, resulted in transistor count increasing at a rate greater than the rate of improved performance.
Rather than seek to increase performance strictly through additional transistors, other performance enhancements involve software techniques. One software approach that has been employed is known as “multithreading.” In software multithreading, an instruction stream may be divided into multiple instruction streams, often referred to as “threads,” that may be executed in parallel. However, today's systems fail to manage threads for optimal system performance.